/*
 * Copyright (C) 2024, Ingenic Semiconductor Co.,Ltd.
 * Author: Keven <keven.ywhan@ingenic.com>
 */

#include <FreeRTOS.h>
#include <task.h>
#include <completion.h>
#include <mutex.h>
#include <string.h>
#include <msleep.h>
#include <kmalloc.h>
#include <mailbox.h>
#include <i2c.h>
#include <pwm.h>

struct mutex mutex;

int count = 0;
static void task_1(void *arg)
{
	while (1) {
		mutex_lock(&mutex);
		count++;
		printk("%s, %d, count = %d\n", __func__, __LINE__, count);
		mutex_unlock(&mutex);

		msleep(100);
	}
}

static void task_2(void *arg)
{

	while (1) {
		mutex_lock(&mutex);
		count++;
		printk("%s, %d, count = %d\n", __func__, __LINE__, count);
		mutex_unlock(&mutex);

		msleep(100);
	}
}


void vApplicationMallocFailedHook(void)
{
	printk("failed allocate\n");
}

int main(void)
{
	printk("hello world %s, %d\n", __func__, __LINE__);

	mutex_init(&mutex);

	xTaskCreate((TaskFunction_t)task_1,    /* 任务入口函数 */
			(const char *)"task_1",   /* 任务名字 */
			(uint16_t)512,         /* 任务栈大小 */
			(void *)NULL,         /* 任务入口函数参数 */
			(UBaseType_t)1,     /* 任务的优先级 */
			(TaskHandle_t *)NULL); /* 任务控制块指针 */
#if 1
	xTaskCreate((TaskFunction_t)task_2,    /* 任务入口函数 */
			(const char *)"task_2",   /* 任务名字 */
			(uint16_t)512,         /* 任务栈大小 */
			(void *)NULL,         /* 任务入口函数参数 */
			(UBaseType_t)1,     /* 任务的优先级 */
			(TaskHandle_t *)NULL); /* 任务控制块指针 */
#endif

	vTaskStartScheduler();   /* 启动任务，开启调度 */

	return 0;
}

